package com.oxygen.design.chainofresponsibility;

import com.oxygen.design.chainofresponsibility.bean.AbstractLogger;
import com.oxygen.design.chainofresponsibility.bean.ConsoleLogger;
import com.oxygen.design.chainofresponsibility.bean.ErrorLogger;
import com.oxygen.design.chainofresponsibility.bean.FileLogger;

/**
 * @author wangjie
 * @title: CriteriaPatternDemo
 * @description: TODO
 * @date 2022/3/12 10:57 PM
 **/
public class ChainPatternDemo {

    private static AbstractLogger getChainOfLoggers() {

        AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.ERROR);
        AbstractLogger fileLogger = new FileLogger(AbstractLogger.DEBUG);
        AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.INFO);

        errorLogger.setNextLogger(fileLogger);
        fileLogger.setNextLogger(consoleLogger);

        return errorLogger;
    }

    public static void main(String[] args) {
        AbstractLogger loggerChain = getChainOfLoggers();

        loggerChain.logMessage(AbstractLogger.INFO, "This is an information.");

        loggerChain.logMessage(AbstractLogger.DEBUG,
                "This is a debug level information.");

        loggerChain.logMessage(AbstractLogger.ERROR,
                "This is an error information.");
    }

}
